#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
名称翻译器 - 将中文项目名称翻译为英文
"""

import re
from typing import Dict


class NameTranslator:
    """名称翻译器类"""
    
    def __init__(self):
        # 常用中文词汇到英文的映射
        self.translation_dict = {
            # 系统类
            '管理系统': 'management_system',
            '管理': 'management',
            '系统': 'system',
            '模拟': 'simulation',
            '模拟器': 'simulator',
            
            # 学校相关
            '学生': 'student',
            '学籍': 'student_record',
            '成绩': 'grade',
            '奖评': 'award_evaluation',
            '宿舍': 'dormitory',
            '通讯录': 'contact_book',
            '高校': 'university',
            '新生': 'freshman',
            '报道': 'registration',
            
            # 商业相关
            '企业': 'enterprise',
            '员工': 'employee',
            '公司': 'company',
            '销售': 'sales',
            '商务': 'business',
            '超市': 'supermarket',
            '图书': 'book',
            '医院': 'hospital',
            '医药': 'medicine',
            '预约': 'appointment',
            '旅店': 'hotel',
            '登记': 'registration',
            '酒店': 'hotel',
            '住宿': 'accommodation',
            
            # 技术相关
            '数据': 'data',
            '分析': 'analysis',
            '可视化': 'visualization',
            '爬虫': 'crawler',
            '网络': 'network',
            '人脸识别': 'face_recognition',
            '卷积网络': 'conv_network',
            '计算器': 'calculator',
            '桌面助手': 'desktop_assistant',
            '直播间': 'live_room',
            
            # 通用词汇
            '个人': 'personal',
            '联系人': 'contact',
            '信息': 'information',
            '设备': 'equipment',
            '实验室': 'laboratory',
            '手机': 'mobile',
            '通讯录': 'address_book',
            '数学': 'math',
            '建模': 'modeling',
            '新建文件夹': 'new_folder',
            '文件夹': 'folder',
            '课程': 'course',
            '作业': 'assignment',
            '供应链': 'supply_chain',
            '智能': 'intelligent',
            '餐饮': 'catering',
            
            # 数字
            '一': '1', '二': '2', '三': '3', '四': '4', '五': '5',
            '六': '6', '七': '7', '八': '8', '九': '9', '十': '10',
            
            # 常见英文缩写（保持原样）
            'ATM': 'atm',
            'KTV': 'ktv',
            'Python': 'python',
            'opencv': 'opencv',
            'ExamSystem': 'exam_system',
            
            # 特殊处理 - 完整短语优先
            'ATM存取款机': 'atm_machine',
            'KTV点歌系统模拟': 'ktv_karaoke',
            'KTV点歌系统': 'ktv_system',
            '存取款机': 'atm_machine',
            '点歌系统': 'karaoke_system',
            '人民网': 'people_daily',
            '新闻': 'news',
            '五个人': 'five_people',
            '控制台': 'console'
        }
    
    def clean_name(self, name: str) -> str:
        """
        清理并标准化名称
        
        Args:
            name: 原始名称
            
        Returns:
            str: 清理后的名称
        """
        if not name:
            return "unnamed_project"
        
        # 去除首尾空格
        name = name.strip()
        
        # 处理特殊情况
        if not name:
            return "unnamed_project"
        
        # 如果是纯数字，添加前缀
        if name.isdigit():
            return f"project_{name}"
        
        # 检查是否包含中文
        if self._contains_chinese(name):
            # 翻译中文名称
            name = self._translate_chinese(name)
        
        # 清理名称，只保留字母、数字、下划线、中划线
        name = re.sub(r'[^a-zA-Z0-9_-]', '_', name)
        
        # 去除连续的下划线和中划线
        name = re.sub(r'[_-]+', '_', name)
        
        # 去除首尾的下划线和中划线
        name = name.strip('_-')
        
        # 确保不为空
        if not name:
            return "unnamed_project"
        
        # 限制长度（Gitee推荐不超过30个字符）
        if len(name) > 30:
            # 尝试智能截断，保留关键词
            words = name.split('_')
            if len(words) > 3:
                # 保留前3个最重要的词
                name = '_'.join(words[:3])
            if len(name) > 30:
                name = name[:30]
        
        # 确保以字母或数字开头
        if name and not (name[0].isalpha() or name[0].isdigit()):
            name = "project_" + name
        
        return name.lower()
    
    def _contains_chinese(self, text: str) -> bool:
        """检查文本是否包含中文字符"""
        for char in text:
            if '\u4e00' <= char <= '\u9fff':
                return True
        return False
    
    def _translate_chinese(self, text: str) -> str:
        """翻译中文文本"""
        result = text
        
        # 特殊处理：先检查是否已经是英文（避免重复翻译）
        if not self._contains_chinese(text):
            # 如果是纯英文，进行简单处理
            result = re.sub(r'[+\s]+', '_', result)  # 替换加号和空格
            return result
        
        # 按长度排序，优先匹配较长的短语
        sorted_keys = sorted(self.translation_dict.keys(), key=len, reverse=True)
        
        for chinese, english in [(k, self.translation_dict[k]) for k in sorted_keys]:
            if chinese in result:
                result = result.replace(chinese, english)
        
        return result
    
    def suggest_name(self, original_name: str) -> str:
        """
        为项目建议一个合适的英文名称
        
        Args:
            original_name: 原始项目名称
            
        Returns:
            str: 建议的英文名称
        """
        return self.clean_name(original_name)
    
    def add_translation(self, chinese: str, english: str):
        """添加新的翻译映射"""
        self.translation_dict[chinese] = english


# 创建全局实例
name_translator = NameTranslator()
